from pydantic import BaseModel, Field, validator
from typing import Optional


class AddStickerRequest(BaseModel):
    """添加贴纸请求模型"""

    # 核心参数
    sticker_id: str = Field(...,
                             description="贴纸资源ID（必填，通过/search_sticker接口获取的贴纸唯一标识，对应sticker_id）")
    start: Optional[float] = Field(0, description="贴纸开始显示时间（秒，必填）")
    end: Optional[float] = Field(5, description="贴纸结束显示时间（秒，必填）")

    # 草稿参数
    draft_id: Optional[str] = Field(None, description="草稿ID（选填，指定要添加贴纸的目标草稿）")

    # 变换参数
    transform_y: Optional[float] = Field(0, description="Y轴位置偏移（选填，默认0）")
    transform_x: Optional[float] = Field(0, description="X轴位置偏移（选填，默认0）")

    # 外观参数
    alpha: Optional[float] = Field(1.0, description="贴纸透明度（选填，默认1.0，范围0.0-1.0，1.0为完全不透明）")
    flip_horizontal: Optional[bool] = Field(False, description="是否水平翻转（选填，默认false）")
    flip_vertical: Optional[bool] = Field(False, description="是否垂直翻转（选填，默认false）")
    rotation: Optional[float] = Field(0.0, description="旋转角度（度，选填，默认0.0）")
    scale_x: Optional[float] = Field(1.0, description="X轴缩放比例（选填，默认1.0）")
    scale_y: Optional[float] = Field(1.0, description="Y轴缩放比例（选填，默认1.0）")

    # 轨道参数
    track_name: Optional[str] = Field("sticker_main", description="轨道名称（选填，默认\"sticker_main\"，用于区分不同贴纸轨道）")
    relative_index: Optional[int] = Field(0, description="相对索引（选填，默认0，控制轨道内贴纸的层级顺序）")

    # 画布参数
    width: Optional[int] = Field(1080, description="画布宽度（选填，默认1080）")
    height: Optional[int] = Field(1920, description="画布高度（选填，默认1920）")
